package com.itany.corejava.code12_线程;

/**
 * @author 石小俊
 * @date 2023年05月15日 9:30
 * JVM启动时会自动创建一个主线程, 用来执行main方法
 * 要想实现多线程, 需要在主线程上创建新的线程
 * 实际上,Java程序在运行期间至少会自动启动两个线程:main线程、gc垃圾回收线程
 */
public class Test01_继承Thread {
    public static void main(String[] args) {
        SomeThread t1 = new SomeThread("t1");
        SomeThread t2 = new SomeThread("t2");
        // 启动线程,自动执行run方法中的内容
        // 此时的程序并不一定立刻执行,需要获取到CPU时间片才会执行
        // 多个线程之间争抢CPU时间片,谁抢到谁执行
        t1.start();
        t2.start();

        // 调用run方法与线程无关,此时只是将run方法当做一个普通方法在执行
        // 因此属于顺序执行
        // 此处表示先执行t1中的run方法,执行完成之后执行t2中的run方法
        // t1.run();
        // t2.run();
    }
}

class SomeThread extends Thread {

    private String name;

    public SomeThread(String name) {
        this.name = name;
    }

    /**
     * 重写run方法,实现线程中需要执行的代码
     */
    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            // 可以通过父类Thread提供的方法获取默认的线程名字
            // System.out.println("默认线程名字:"+getName());
            // System.out.println(getName()+"正在执行,打印数字:"+i);

            // 通过有参构造函数自定义线程名
            System.out.println(name + "正在执行,打印数字:" + i);
        }
    }
}
